#pragma once

#include <string>
#include <vector>
#include <memory>
#include <functional>
#include "market_data/market_data.h"
#include "utils/json_utils.h"

// 策略基类
class StrategyBase {
public:
    // 构造函数
    explicit StrategyBase(const std::string& name) : name_(name) {}
    
    // 析构函数
    virtual ~StrategyBase() = default;
    
    // 获取策略名称
    std::string get_name() const { return name_; }
    
    // 处理市场数据
    virtual void on_market_data(const MarketData& data) = 0;
    
    // 处理交易执行
    virtual void on_trade(const Trade& trade) {}
    
    // 设置信号回调函数
    void set_signal_callback(std::function<void(const Signal&)> callback) {
        signal_callback_ = callback;
    }
    
    // 发出信号
    void emit_signal(const Signal& signal) {
        if (signal_callback_) {
            signal_callback_(signal);
        }
    }
    
    // 初始化策略
    virtual void initialize() {}
    
    // 策略结束时调用
    virtual void finalize() {}

protected:
    std::string name_;
    std::function<void(const Signal&)> signal_callback_;
};